﻿/**********************************************************/
/* Lopende band adapter */
/* 13-10-2010 - Groep 6: Scheidsrechter(Lars Mohr 0629693, Roy Mengelers 0705020, Roy Lieben 0847186, Timothy Janssen 0951986, Lars Brand 0901164 - */
/*	
/* Omschrijving:
/* */
/**********************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Roborally.CommonData.Enums;
using Roborally.CommonData.GlobaleTypes;

namespace Roborally.Scheidsrechter
{
    public enum BandSoort { Lopendeband, Expressband };

    /// <summary>
    /// Adapter voor een loopband.
    /// Aangezien het bord gebruik maakt van een enum (BandType) met 23 verschillende waardes, is een adapter gemaakt voor de verschillende loopbanden.
    /// Functionaliteit:
    /// - Richting van de loopband.
    /// - Bepalen van bocht a.d.h.v. richting v/d speler.
    /// - Soort loopband (lopende- of expressband).
    /// - Type is de enum waarde van het bord-vak.
    /// </summary>
    public class LopendebandAdapter
    {
        public Richting Richting { get; private set; }
        public BandSoort Soort { get; private set; }
        private int Type { get; set; }

        public LopendebandAdapter(IVak Vak)
        {
            if (Vak.KrijgType() == VakType.Lopendeband)
            {
                Soort = BandSoort.Lopendeband;
                Vak.KrijgBandType();
                //Initialize((Vak as Bord.Lopendeband).Bandtype);
            }
            if (Vak.KrijgType() == VakType.Expresband)
            {
                Soort = BandSoort.Expressband;
                Vak.KrijgBandType();
                //Initialize((Vak as Bord.Expresband).Bandtype);
            }
        }

        private void Initialize(BandType BandType)
        {
            this.Type = (int)BandType;
            if (Type == 0 || Type == 4 || Type == 8 || Type == 12 || Type == 16 || Type == 20)
                Richting = Richting.Noord;
            else if (Type == 1 || Type == 5 || Type == 9 || Type == 13 || Type == 17 || Type == 21)
                Richting = Richting.Oost;
            else if (Type == 2 || Type == 6 || Type == 10 || Type == 14 || Type == 18 || Type == 22)
                Richting = Richting.Zuid;
            else if (Type == 3 || Type == 7 || Type == 11 || Type == 15 || Type == 19 || Type == 23)
                Richting = Richting.West;
        }

        public bool Bocht(Richting VakRichting)
        {
            bool bocht = false;
            switch (VakRichting)
            {
                case Richting.Noord:
                    bocht = (Type == 5 || Type == 11 || Type == 13 || Type == 19 || Type == 21 || Type == 23);
                    break;
                case Richting.West:
                    bocht = (Type == 4 || Type == 10 || Type == 12 || Type == 18 || Type == 20 || Type == 22);
                    break;
                case Richting.Zuid:
                    bocht = (Type == 7 || Type == 9 || Type == 15 || Type == 17 || Type == 21 || Type == 23);
                    break;
                case Richting.Oost:
                    bocht = (Type == 6 || Type == 8 || Type == 14 || Type == 16 || Type == 20 || Type == 22);
                    break;
                default:
                    break;
            }
            return bocht;
        }
    }
}
